/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Clases;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ListIterator;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author JULIAN
 */
public class Carrodecompra extends HttpServlet {
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {


        HttpSession session_1 = request.getSession(true);
        String idprocar;
        String ExisteenCarrito="";
        
        Vector carrito = new Vector(1,1);
        
        if((Vector)session_1.getAttribute("carrito")!=null){
            carrito =(Vector) session_1.getAttribute("carrito");            
                                                           }
        else{
            session_1.setAttribute("carrito", carrito);
            }
        
        
        String cantidad = request.getParameter("cantidad");
        String almacen =(String) session_1.getAttribute("alma");
        String producto =request.getParameter("producto");

        ObjetoProducto obje = new ObjetoProducto();
        ListIterator itr = carrito.listIterator();

        while(itr.hasNext()){
           obje = (ObjetoProducto) itr.next();
           idprocar=obje.getidP();
           if(  producto.equals(idprocar)){
               ExisteenCarrito="existe";
               break;
                                          }
                          }

       

        
        PreparedStatement st = null;
        SQL_Consultas obj = new SQL_Consultas();

        obj.setProducto(request.getParameter("producto"));
        obj.setAlmacen(almacen);

        st = obj.ExisteProducto();
        ResultSet resultado=st.executeQuery();

         out.println("<html>");
         out.println("<title>ERROR</title>");
         out.println("<body bgcolor='#000000'>");

          if(!resultado.next()){
          out.println("<body bgcolor='#000000'>");
          out.println("<p><font color=white>El Producto no existe</p></font>");
          out.println("<h1><a href=SeleccionaProductos.jsp>Regresar</a></h1>");
          out.println("</html>");

                               }
          else if ((cantidad.equals(""))||(almacen.equals(""))){
          out.println("<body bgcolor='#000000'>");
          out.println("<p><font color=white>Todos los Campos Son Obligatorios</p></font>");
          out.println("<h1><a href=SeleccionaProductos.jsp>Regresar</a></h1>");
          out.println("</html>");

                                                                }
          else{
             st.close();
             resultado.close();

             st = obj.ValidaProducto();
             resultado=st.executeQuery();
             
             if(!resultado.next()){
                  out.println("<p><font color=white>El articulo no ha sido registrado aun en este almacen</p></font>");
                  out.println("<h1><a href=SeleccionaProductos.jsp>Regresar</a></h1>");
                  out.println("</html>");
                                  }
                else{

                  int existencia = resultado.getInt("num_existencias");

                  if(existencia==0){
                  out.println("<p><font color=white>No hay stock del producto en este almacen</p></font>");
                  out.println("<h1><a href=SeleccionaProductos.jsp>Regresar</a></h1>");
                  out.println("</html>");
                                                           }
                     else if(existencia<Integer.parseInt(cantidad)){
                          out.println("<p><font color=white>La cantidad solicitada supera el stock del almacen</p></font>");
                          out.println("<p><font color=white>del producto hay "+existencia+" unidades disponibles</p></font>");
                          out.println("<h1><a href=SeleccionaProductos.jsp>Regresar</a></h1>");
                          out.println("</html>");
                                           }
                  else if(ExisteenCarrito.equals("existe")){
                          out.println("<p><font color=white>Este producto ya esta en canasta</p></font>");
                          out.println("<h1><a href=SeleccionaProductos.jsp>Regresar</a></h1>");
                          out.println("</html>");
                                                           }
                         else{
                             st.close();
                             resultado.close();

                             st = obj.ExisteProducto();
                             resultado=st.executeQuery();
                             resultado.next();

                             ObjetoProducto car = new ObjetoProducto();
                             car.setidP(producto);
                             car.setCantidadP(cantidad);
                             car.setNombreP(resultado.getString("nombre_producto"));
                             car.setDescripcionP(resultado.getString("descripcion"));
                             car.setPrecioP(resultado.getString("precio_publico"));
                             car.setivaP(resultado.getString("iva"));
                             
                             carrito.addElement(car);
                             
                             st.close();
                             resultado.close();
                             
                             session_1.setAttribute("carrito",carrito);
                             response.sendRedirect("SeleccionaProductos.jsp");
                             }

                    }



            }

            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Carrodecompra</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet Carrodecompra at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
            */
        } finally { 
            out.close();
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(Carrodecompra.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(Carrodecompra.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
